/**
 * 
 */
package co.edu.uniquindio.pruebas;

import java.util.Date;
import java.util.List;

import javax.naming.NamingException;

import org.junit.Assert;
import org.junit.Test;

import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Pais;
import co.edu.uniquindio.logica.Vendedor;

/**
 * 
 * Prueba implementation class for: PruebaVendedor
 * El proposito de esta clase es el probar  la
 * DAO relacionada con la informacion de un vendedor.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 *
 */
public class PruebaVendedor extends PruebaMagnum
{

    //private static Vendedor vendedor ;
	
	public PruebaVendedor() throws NamingException {
		super();
		// TODO Auto-generated constructor stub
	}
	/**
	 * Metodo en el cual se hacen diversas incersiones en la BD atravez de
	 * de la DAO pertinente relacionada al vendedor para despues verificar
	 * los datos obtenidos atravez de la misma DAO. 
	 * @throws NamingException
	 */
	//@Test
	public void testCrudVendedor() throws NamingException 
	{
		Pais pais=new Pais("av1235",new Date(),"Venezuela");
		paisDao.insert(pais);

		 Vendedor vendedor = new Vendedor("1234567","asdde@hot","curlos",pais,"mancho","minm");

		//prueba insert
		//vendedorDao.insert(vendedor);
		//Assert.assertEquals("1234567",vendedor.getCedula());

		Vendedor vendedor2 = new Vendedor("12345678","asdde@hot","andres",pais,"pipe","eso");

		//prueba insert
		//vendedorDao.insert(vendedor2);
		//Assert.assertEquals("12345678",vendedor2.getCedula());


		//Prueba de búsqueda
		Vendedor vendedorRecuperado=vendedorDao.findByKey(vendedor.getCedula());
		Assert.assertEquals(vendedorRecuperado.getCedula(), vendedor.getCedula());    	

		//Prueba actualización
		vendedorRecuperado.setCedula("19467");
		vendedorRecuperado.setNombre("Alberto");
		vendedorRecuperado.setCorreo("qwert@hotmail");
		vendedorRecuperado.setAlias("lola");
		vendedorDao.update(vendedorRecuperado);
		vendedor=vendedorDao.findByKey(vendedorRecuperado.getCedula());
		Assert.assertEquals("19467",vendedor.getCedula());

		//Prueba getAll
		Vendedor otroVendedor= new Vendedor("239876","asfg@hot","maicol",pais,"pablo","43569");
		vendedorDao.insert(otroVendedor);
		List<Vendedor>vendedores=vendedorDao.getAll();
		Assert.assertTrue(vendedores.contains(otroVendedor));
		Assert.assertTrue(vendedores.contains(vendedor));    	

		//Prueba delete
		//		vendedorDao.remove(otroVendedor);
		//		vendedorDao.remove(vendedor);
		//		vendedores=vendedorDao.getAll();
		//		Assert.assertTrue(!vendedores.contains(otroVendedor));
		//		Assert.assertTrue(!vendedores.contains(vendedor));    	


	}
	/**
	 * Metodo en el cual se hacen diversas incersiones en la BD atravez de
	 * de la DAO pertinente relacionada al vendedor para despues verificar
	 * los datos obtenidos atravez de la misma DAO mediante una lista.
	 */
	//@Test
	public void pruebaList() throws NamingException
	{
		Pais pais=new Pais("av1235",new Date(),"Venezuela");
		Vendedor vendedor = new Vendedor("1234567","asdde@hot","curlos",pais,"mancho","23124");
		List<Automovil>lista = vendedorDao.automovilesVendedor(vendedor);
		Assert.assertEquals(lista.size(), 2);
	}
	/**
	 * este metodo me permitira realizar la prueba para el metodo buscar vendedor por nombre en la cadena se pueden agregar % _ que nos ayudaras a diltrar la busqueda en la lista
	 * @throws NamingException 
	 */
	//@Test
	public void pruebaBuscar() throws NamingException
	{
		List<Vendedor>lista = vendedorDao.buscarVporNombre("%c_rlos");
		List<Vendedor>lista2 = vendedorDao.buscarVporNombre("%carlos%");
		List<Vendedor>lista3 = vendedorDao.buscarVporNombre("a%");
		
		Assert.assertEquals(lista.size(), 3);
		Assert.assertEquals(lista2.size(), 2);
		Assert.assertEquals(lista3.size(), 2);
		
		for (Vendedor vendedor : lista) {
			System.out.println(vendedor.getNombre()+"  lista 1");
		}

		for (Vendedor vendedor : lista2) {
			System.out.println(vendedor.getNombre()+"  lista 2");
		}
		for (Vendedor vendedor : lista3) {
			System.out.println(vendedor.getNombre()+"  lista 3");
		}
	}
	/**
	 * este metodo me pemite realizar la prueba para el metodo automoviles por vendedor 
	 */
	@Test
	public void autosVen()
	{
		//List<Automovil> autos =vendedorDao.automovilesVendedor(vendedor);
		Pais pais=new Pais("av1235",new Date(),"Venezuela");
		Vendedor vendedor = new Vendedor("1234567","asdde@hot","curlos",pais,"mancho","234565");
		List<Automovil>autos = vendedorDao.automovilesPVendedor(vendedor);
		Assert.assertEquals(autos.size(), 1);
		for (int i = 0; i < autos.size(); i++) {
			System.out.println(autos.get(i));
		}
		
		
	}
}
